package com.docmgmt.mvp.ragflow.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import jakarta.validation.constraints.*;
import java.util.List;

/**
 * Prompt 配置 DTO
 * 
 * 用于Chat Assistant的prompt_config字段
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PromptConfigDTO {

    /**
     * 系统提示词（必须包含{knowledge}占位符）
     */
    @NotBlank(message = "system提示词不能为空")
    private String system;

    /**
     * 开场白（SDK中对应Web UI的opener）
     */
    private String prologue;

    /**
     * 无结果时的回复
     */
    @JsonProperty("empty_response")
    private String emptyResponse;

    /**
     * 参数定义
     */
    private List<ParameterDefinition> parameters;

    /**
     * 相似度阈值（0-1）
     */
    @JsonProperty("similarity_threshold")
    @DecimalMin(value = "0.0", message = "similarity_threshold必须>=0")
    @DecimalMax(value = "1.0", message = "similarity_threshold必须<=1")
    private Float similarityThreshold;

    /**
     * 关键词权重（0-1）
     */
    @JsonProperty("keywords_similarity_weight")
    @DecimalMin(value = "0.0", message = "keywords_similarity_weight必须>=0")
    @DecimalMax(value = "1.0", message = "keywords_similarity_weight必须<=1")
    private Float keywordsSimilarityWeight;

    /**
     * 返回chunk数量
     */
    @JsonProperty("top_n")
    @Min(value = 1, message = "top_n必须>=1")
    @Max(value = 100, message = "top_n必须<=100")
    private Integer topN;

    /**
     * 是否显示引用来源
     *
     * 当设置为 true 时，AI 回答会包含引用的文档来源信息
     * 用户可以点击查看原文，提升答案的可信度
     *
     * 默认值：true（推荐开启）
     */
    private Boolean quote;

    /**
     * 是否启用文本转语音（Text-to-Speech）
     *
     * 当设置为 true 时，AI 回答会自动转换为语音播放
     * 适合无障碍访问或语音交互场景
     *
     * 默认值：false
     * 注意：需要配置 TTS 服务才能使用此功能
     */
    private Boolean tts;

    /**
     * 是否优化多轮对话
     *
     * 当设置为 true 时，系统会自动优化多轮对话的上下文理解：
     * - 自动识别代词指代（如"它"、"这个"）
     * - 补全省略的主语和宾语
     * - 理解对话中的时间和空间关系
     *
     * 例如：
     * 用户："什么是 RAGFlow？"
     * AI："RAGFlow 是一个开源的 RAG 引擎..."
     * 用户："它有哪些功能？"（系统会理解"它"指代 RAGFlow）
     *
     * 默认值：true（推荐开启）
     */
    @JsonProperty("refine_multiturn")
    private Boolean refineMultiturn;

    /**
     * 参数定义
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ParameterDefinition {
        /**
         * 参数键名
         */
        private String key;

        /**
         * 是否可选
         */
        private Boolean optional;
    }
}

